package com.smart.community.region.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.smart.community.commons.enums.SystemStatusEnum;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 社区实体类
 * 
 * @author Wu.Liang
 * @since 2024-12-21
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("sc_community")
public class Community implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 社区ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 社区编码
     */
    @TableField("community_code")
    private String communityCode;

    /**
     * 社区名称
     */
    @TableField("community_name")
    private String communityName;

    /**
     * 所属区域ID
     */
    @TableField("region_id")
    private Long regionId;

    /**
     * 详细地址
     */
    @TableField("address")
    private String address;

    /**
     * 面积（平方米）
     */
    @TableField("area")
    private BigDecimal area;

    /**
     * 楼栋数量
     */
    @TableField("building_count")
    private Integer buildingCount;

    /**
     * 房户数量
     */
    @TableField("household_count")
    private Integer householdCount;

    /**
     * 居民数量
     */
    @TableField("resident_count")
    private Integer residentCount;

    /**
     * 备注（对应表字段 description）
     */
    @TableField("description")
    private String description;

    /**
     * 管理员用户ID（负责人）
     */
    @TableField("manager_id")
    private Long managerId;

    /**
     * 纬度
     */
    @TableField("latitude")
    private BigDecimal latitude;

    /**
     * 经度
     */
    @TableField("longitude")
    private BigDecimal longitude;

    /**
     * 物业公司
     */
    @TableField("property_company")
    private String propertyCompany;

    /**
     * 物业电话
     */
    @TableField("property_phone")
    private String propertyPhone;

    /**
     * 社区联系电话
     */
    @TableField("contact_phone")
    private String contactPhone;

    /**
     * 状态：0-禁用，1-启用
     */
    @TableField("status")
    private Integer status;

    /**
     * 排序字段
     */
    @TableField("sort_order")
    private Integer sortOrder;

    /**
     * 逻辑删除：0-未删除，1-已删除
     */
    @TableLogic
    @TableField("deleted")
    private Integer deleted;

    /**
     * 创建人ID
     */
    @TableField("create_by")
    private Long createBy;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新人ID
     */
    @TableField("update_by")
    private Long updateBy;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    // ==================== 业务方法 ====================

    /**
     * 获取状态文本
     */
    @JsonIgnore
    public String getStatusDesc() {
        return SystemStatusEnum.isEnabled(status) ? "启用" : "禁用";
    }

    /**
     * 计算入住率
     */
    @JsonIgnore
    public BigDecimal getOccupancyRate() {
        if (householdCount == null || householdCount == 0) {
            return BigDecimal.ZERO;
        }
        if (residentCount == null) {
            return BigDecimal.ZERO;
        }
        
        // 假设每个房户平均3人
        int totalCapacity = householdCount * 3;
        if (totalCapacity == 0) {
            return BigDecimal.ZERO;
        }
        
        return BigDecimal.valueOf(residentCount)
                .divide(BigDecimal.valueOf(totalCapacity), 4, BigDecimal.ROUND_HALF_UP)
                .multiply(BigDecimal.valueOf(100));
    }
} 